In a traditional server environment, a physical server may contain a local storage device. The local storage device may be a hard disk drive. The local storage device may store a boot image for the physical server. The physical server may read data from the boot image stored on the local storage device and may load an operating system and associated programs and utilities from the local storage device.
In an environment which includes server virtualization, multiple virtual machines may operate within a single physical machine. The virtual machines may also migrate between physical machines. Shared storage is desirable for server virtualization environments because of the potential of virtual machine migration. However, hosting a separate boot image for each virtual machine instance may create an enormous demand for storage within the shared storage system. For example, a system of thirty physical servers, each hosting twenty virtual machines, must have storage on the shared storage system for six hundred boot images. This requirement increases the cost of creating and maintaining a virtual machine environment.
The virtual machines, however, may be redundant copies of one another used as overflow or fail-over backups, and thus may be instantiated using nearly identical boot images. Other virtual machines may share substantially similar boot images. In large part, identical or substantially similar boot images may ultimately require that the shared storage system separately store hundreds or thousands of copies of identical files or blocks. This is an inefficient allocation of finite storage within the shared storage system. The addition of servers or virtual machines may require that the storage within the shared storage system be significantly increased, adding additional financial requirements to a planned upgrade.
In view of the foregoing, it would be desirable to provide techniques for shared storage and storage optimization which overcomes the above-described inadequacies and shortcomings.